//
//  JEmoticonsTextView.swift
//  01-表情键盘
//
//  Created by Jason on 30/5/15.
//  Copyright (c) 2015 Shepherd. All rights reserved.
//

import UIKit

class JEmoticonsTextView: UITextView {
    func insertEmoticons(emoticons:JEmoticons) {
        // 0.判断是否是删除按钮
        if emoticons.removeFlag  {
            // 退格的功能系统已经实现了
            deleteBackward()
            return
        }
        // 1.判断是否是图片表情
        if emoticons.chs != nil {
            let attrStr = JEmoticonsAttachment.emoticonString(emoticons, height:font.lineHeight)
            // 2.将文本添加到textView
            // 拿到一个可变的文本
            var textStr = NSMutableAttributedString(attributedString:attributedText)
            textStr.replaceCharactersInRange(selectedRange, withAttributedString: attrStr)
            // 重新添加文本属性
            textStr.addAttribute(NSFontAttributeName, value:font, range: NSMakeRange(0, textStr.length))
            // 3.记录当前光标的位置
            let curRange = selectedRange
            // 4.设置文本
            attributedText = textStr
            // 5.恢复光标位置
            selectedRange = NSMakeRange(curRange.location + 1, 0)
            // 主动调用代理方法
            delegate?.textViewDidChange!(self)
        } else if emoticons.emojiStr != nil {
            // 插入emoji字符
            replaceRange(selectedTextRange!, withText: emoticons.emojiStr!)
        }
    }
    
    func fullText() -> String {
        let attrStr = attributedText
        // 定义一个可变字符串,用于接收最后的结果
        var strM = String()
        attributedText.enumerateAttributesInRange(NSMakeRange(0, attrStr.length), options: NSAttributedStringEnumerationOptions.allZeros) { (dict, range, _) in
            // 通过跟踪能够发现,如果有NSAttachment,说明有图片 否则是文本
            // 需要解决从NSAttachment取得表情
            if let attachment = dict["NSAttachment"] as? JEmoticonsAttachment {
                println("有图片"+"\(attachment.chs)")
                strM += attachment.chs!
            } else {
                let str = (attrStr.string as NSString).substringWithRange(range)
                println("\(str)")
                strM += str
            }
        }
        println("\(strM)")
        return strM
    }
}
